/*
 * Affichage.java Created on Oct 13, 2006 by M.C.Boulahiya
 * 
 * Haha la modif ou fou !!!
 */

import java.awt.*;

import javax.media.j3d.*;
import javax.swing.*;
import javax.vecmath.*;

import com.sun.j3d.utils.behaviors.vp.OrbitBehavior;
import com.sun.j3d.utils.universe.*;

/**
 * @author M.C.Boulahiya
 * 
 * La classe qui lance la McbVue.
 * TODO Faire coincider les X, Y et Z de MH avec la vue attendue.
 */
public class Affichage extends JFrame {
	private static final long serialVersionUID = 1L;
	private static String nomDuFichier = "vue2";

	
	/**
	 * Le constructeur par defaut.
	 * 
	 * @param title Le titre de la JFrame.
	 * @param gc Le GraphicsConfiguration.
	 */
	public Affichage(String title, GraphicsConfiguration gc) {
		super(title, gc);
		setLayout(new BorderLayout());
		
		CapturingCanvas3D canvas3d = new CapturingCanvas3D(gc);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		add("Center", canvas3d);	
		SimpleUniverse simpleU = new SimpleUniverse(canvas3d);
		
		ViewingPlatform viewingPlatform = simpleU.getViewingPlatform();
		viewingPlatform.setNominalViewingTransform();
		
		BoundingSphere bounds = new BoundingSphere(new Point3d(), 150);
		OrbitBehavior orbitBehavior = 
			new OrbitBehavior(canvas3d, OrbitBehavior.REVERSE_ALL);
		orbitBehavior.setSchedulingBounds(bounds);
		viewingPlatform.setViewPlatformBehavior(orbitBehavior);
				
		canvas3d.getView().setBackClipDistance(50.0);
		canvas3d.getView().setFrontClipDistance(0.05);
		
		BranchGroup root = createSceneGraph();
		root.compile();
		simpleU.addBranchGraph(root);
		
		pack();
    setVisible(true);
	} // Fin de Affichage(String, GraphicsConfiguration)


	/**
	 * Cree le graphe de scene de l'application.
	 * 
	 * @return La racine du graphe de scene.
	 */
	private BranchGroup createSceneGraph() {
		BranchGroup root = new BranchGroup();
		root.setName("root");
		
		VueHall vueMH = new VueHall();
				
		//Chargement du fichier de vue
		vueMH.extractionFromView(nomDuFichier);
		
		//Chargement du Hall
		root.addChild(vueMH.getHallBG());
		
		//Chargement des trolls
		root.addChild(vueMH.getTrollsBG());
		
		//Chargement des monstres
		root.addChild(vueMH.getMonstresBG());

		//Chargement des tresors
		root.addChild(vueMH.getTresorsBG());

		//Chargement des champignons
		root.addChild(vueMH.getChampignonsBG());

		//Chargement des lieux
		root.addChild(vueMH.getLieuxBG());
		
		return root;
	} // Fin de createSceneGraph
	
	
	/**
	 * L'executable.
	 * 
	 * @param args Le nom du fichier vue?
	 */
	public static void main(String[] args) {
		setDefaultLookAndFeelDecorated(true);
		JDialog.setDefaultLookAndFeelDecorated(true);
		if (args.length > 1)
			nomDuFichier = args[1];
		
		GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
		Affichage aff = new Affichage("La McbVue", config);
		aff.setLocation(50, 50);
		aff.setSize(new Dimension(800, 600));
	} // Fin de main(String[])		

} // Fin de la classe Affichage

//Fin du fichier Affichage.java